#include "mainscence.h"
#include "ui_mainscence.h"
#include"config.h"
#include<QIcon>
#include"map.h"
#include<QPainter>
#include<QMouseEvent>

Mainscence::Mainscence(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::Mainscence)
{
    ui->setupUi(this);//顺序怎么办？

    initScene();//调用初始化场景函数
    //启动游戏，调用启动游戏函数
    playGame();
}

Mainscence::~Mainscence()
{
    delete ui;
}
void Mainscence::playGame()
{
    //启动定时器
    m_Timer.start();

    //监听定时器发送的信号(槽)
    connect(&m_Timer , &QTimer::timeout,[=](){
        //更新游戏中元素的坐标
        updatePosition();
        //绘制到主屏幕中
        update();//系统自带主函数（重新绘制游戏窗口中所有信息）
    });

}

void Mainscence::updatePosition()
{
    //更新地图坐标
    m_map.mapPosition();

    //测试子弹
   // temp_Bullet.m_Free = false;
   // temp_Bullet.updatePosition();

    //发射子弹
    m_hero.shoot();

    //计算所有非空闲子弹的当前坐标（让子弹飞起来）
    for(int i=0;i<BULLET_NUM;i++)
    {
        //如果非空闲，需要更新这个子弹的坐标
        if(m_hero.m_bullets[i].m_Free==false)
        {
            m_hero.m_bullets[i].updatePosition();//此处仅更新了坐标，没有绘制
        }
    }
}

void Mainscence::paintEvent(QPaintEvent *)
{
    QPainter painter(this);//要在当前屏幕（this）中画画
    //绘制地图
    painter.drawPixmap(0,m_map.m_map1_posY,m_map.m_map1);//初始坐标为0，末坐标随map1变动
    painter.drawPixmap(0,m_map.m_map2_posY,m_map.m_map2);

    //绘制英雄飞机
    painter.drawPixmap(m_hero.m_X, m_hero.m_Y, m_hero.m_Plane);

    //绘制测试子弹
   // painter.drawPixmap(temp_Bullet.m_X,temp_Bullet.m_Y,temp_Bullet.m_Bullet);

    //绘制子弹
   for(int i=0;i<BULLET_NUM;i++)
   {
       //如果非空闲，绘制
       if(m_hero.m_bullets[i].m_Free==false)
      painter.drawPixmap(m_hero.m_bullets[i].m_X,m_hero.m_bullets[i].m_Y,m_hero.m_bullets[i].m_Bullet);
   }

}

void Mainscence::mouseMoveEvent(QMouseEvent * event)//需有<QMouseEvent>头文件
{
    //记录鼠标点击的位置
    int x = event->x() - m_hero.m_Rect.width()*0.5;
    int y = event->y() - m_hero.m_Rect.height()*0.5;

    //边界检测
    if(x<=0)
    {
        x=0;
    }
    if(x>=GAME_WIDTH-m_hero.m_Rect.width())
    {
        x=GAME_WIDTH-m_hero.m_Rect.width();
    }
    if(y<=0)
    {
        y = 0;
    }
    if(y >= GAME_HEIGHT - m_hero.m_Rect.height())
    {
        y=GAME_HEIGHT - m_hero.m_Rect.height();
    }
    m_hero.setPosition(x,y);//用于将飞机移到相应位置
}

void Mainscence::initScene()//初始化场景
{
    //设置窗口固定尺寸

    setFixedSize(GAME_WIDTH,GAME_HEIGHT);//后期大小只需在h文件中修改即可
    //设置标题
    setWindowTitle(GAME_TITLE);

    //加载图标
    setWindowIcon(QIcon(GAME_ICON));

    //定时器初始化
    m_Timer.setInterval(GAME_RATE);

}



